home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / emul / cp4 / support / easy1541 / dev / examples / iecunit.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  2KB  |  135 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <exec/exec.h>
  5. #include <exec/execbase.h>
  6. #include <exec/memory.h>
  7. #include <proto/exec.h>
  8. #include <proto/dos.h>
  9.  
  10. #include <iec/iec.h>
  11.  
  12. //----------------------------------------
  13. //64Unit 1.0
  14. //
  15. //Change the device number of drive 1541
  16. //
  17. //----------------------------------------
  18.  
  19.  
  20. struct iecbase *IECBase;
  21.  
  22. struct RDArgs *rda;
  23. LONG argv[2]={0,0};
  24. char device=8;        //Default device number
  25. char newdevice=8;    //New device number
  26. char string[40];    //Command string buffer
  27.  
  28.  
  29. char Version[]="$VER:64Unit 1.0 (01.09.96) by Fabrizio Farenga";
  30.  
  31. //******************************************
  32. // Send a null-terminated string to the 1541
  33. //******************************************
  34. void SendString(char* string)
  35. {
  36. int t;
  37. for (t=0;string[t]!=0;t++) CIOut(string[t]); 
  38. }
  39.  
  40.  
  41. void ChangeUnit(void)
  42. {
  43.     //Open the command channel
  44.     //OPEN 15,8,15
  45.     Listen(device);
  46.     Second(CMD_OPEN+15);
  47.  
  48.     if (IECBase->iec_ST==ST_OK)
  49.         {
  50.         UnListen();
  51.  
  52.         Listen(device);
  53.         Second(CMD_DATA+15);
  54.  
  55.         //Send the Memory-Write Command.
  56.         sprintf(string,"M-W");
  57.  
  58.         SendString(string);
  59.  
  60.         //Send the memory address of the device number (in the 1541 RAM)
  61.         CIOut(119);
  62.         CIOut(0);
  63.  
  64.         //Send the number of bytes to change (2)
  65.         CIOut(2);
  66.  
  67.         //Write the newdevice number (for Listen and Talk)
  68.         CIOut(newdevice+32);
  69.         CIOut(newdevice+64);
  70.  
  71.         UnListen();
  72.  
  73.  
  74.         //CLOSE
  75.         Listen(device);
  76.         Second(CMD_CLOSE+15);
  77.         UnListen();
  78.  
  79.         printf ("Device %d is now known as %d\n\n",device,newdevice);
  80.  
  81.         }
  82.     else
  83.         {
  84.         printf ("\n?DEVICE NOT PRESENT\n\n");
  85.         }
  86.  
  87. }
  88.  
  89.  
  90. void main(void)
  91. {
  92.  
  93. if ((rda = ReadArgs("NEWDEVICE/N/A,OLDDEVICE/N",argv,NULL)) != NULL)
  94.     {
  95.     if (argv[0]!=0) newdevice=*(LONG *)argv[0];    //New device number
  96.     if (argv[1]!=0) device=*(LONG *)argv[1];    //Old device number
  97.     }
  98.     else
  99.     {
  100.     printf ("Required argument missing!\n\n");
  101.     return;
  102.     }
  103.  
  104. if ((device<4)||(device>30))
  105.     {
  106.     printf ("\n?DEVICE NOT PRESENT ERROR\n\n");
  107.     return;
  108.     }
  109.  
  110. if (newdevice<4)
  111.     {
  112.     printf ("\nArgumento out of range\n\n");
  113.     return;
  114.     }
  115.  
  116. IECBase = (struct iecbase*)OpenLibrary("iec.library",0L);
  117.  
  118. if (IECBase!=0)
  119.     {
  120.  
  121.     ChangeUnit();
  122.  
  123.     CloseLibrary((struct Library*)IECBase);
  124.     }
  125. else
  126.     {
  127.     printf ("Can't open iec.library\n");
  128.     return;
  129.     }
  130.  
  131.     if (rda!=NULL) FreeArgs(rda);
  132.  
  133.  
  134. }
  135.